import java.util.Random;
import java.util.Scanner;

public class JavaLogicControl {
    //选择
    public static void main1(String[] args) {
        for(int a=2000;a<=2023;a++) {
            if(a%4==0&&a%100!=0||a%400==0) {
                System.out.println(a + "是闰年");
            }else {
                System.out.println(a + "不是闰年");
            }
        }
    }


    public static void main2(String[] args) {
        //不能做switch参数的数据类型: long,float,double,boolean  ...char和string都可以
        char a='s';
        switch(a){
            case 's':
                System.out.println("1");
                break;
            case 'd':
                System.out.println("2");
                break;
            default:
                System.out.println("错误");
                break;
        }
    }






    //循环
    public static void main3(String[] args) {
        int a=0;
        while(a<11) {
            System.out.print(a++);
            System.out.print(" ");
        }
        System.out.println();



        //调试支持从一个断点跳到另一个断点
        for(int i=1;i<10;i++) {
            for(int j=1;j<=i;j++) {
                System.out.print("i*j=" + (i * j));
                System.out.print("\t");
            }
            System.out.println();
        }



        int result=1;
        int a1=1;
        int sum=0;
        while(a1<=5) {
            result*=a1;
            sum+=result;
            a1++;
        }
        System.out.println(sum);



        //while(true) {
           //System.out.println("1");
       // }
    }




    public static void main4(String[] args) {
        //找到既能被3整除也能被5整除的数    要求:使用break或者continue当中的一个
        int i=1;
        while(i<=100) {
            if(i%3!=0||i%5!=0) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }




    //输入（在java当中，我们会用到java官方写好的工具(类)：scanner）
    public static void main5(String[] args) {
        Scanner scan=new Scanner(System.in);
        System.out.print("输入整数:");
        int n=scan.nextInt();
        System.out.println("结果为:"+n);

        scan.nextLine();
        //此时，上边输入完之后，回车会被next读取，所以不会让你输入，此时加上一个nextline就能把回车读取
        System.out.print("输入名字:");
        String name2= scan.next();     //遇到空格就结束
        String name= scan.nextLine();  //nextLine能读取空格，当next输入了空格后，nextline能读取next输入的空格和空格后的内容
        System.out.println("名字是:"+name2);
        System.out.println(name);

        scan.close();  //最后要把这个关闭
    }






    //循环输入，输出(crtl+D 就结束了)
    public static void main6(String[] args) {
        Scanner scan=new Scanner(System.in);

        while(scan.hasNextInt()) {   //有下一个就打印
            int n=scan.nextInt();
            System.out.print("n="+n);
        }
    }






    //exercise(猜数字游戏)   Math.Random
    public static void main7(String[] args) {
        Scanner scan=new Scanner(System.in);
        Random random=new Random(123);    //在括号中加入数字，那么每次生成的随机数都是固定的
        int randNum=random.nextInt(100);   //括号中加数字，就是表示随机生成[0,100)的数
        int randNum1=random.nextInt(50)+50;   //加数字，就是表示随机生成[50,100)的数
        System.out.println(randNum);
        while(true) {
            System.out.print("输入猜的数字:");
            int num=scan.nextInt();
            if(num>randNum) {
                System.out.println("大");
            }else if(num==randNum) {
                System.out.println("数字是:"+num);
                break;
            }else {
                System.out.println("小");
            }
        }
    }





    //exercise(判断素数+打印1-100的素数)
    //素数:只能被1和自己整除
    //思路2:通过观察可知:如果一个数不是素数那么他一定能够被n/2之间的一个数字整除
    public static void main8(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();     //n是要判断是否为素数的数
        int i=0;
        for(i=2;i<n;i++) {
            if(n%i==0) {
                System.out.println(n+"不是素数!");
                break;    //如果n能找到和其他不是1和它本身的数相除，那么它就不是素数,就不需要在进行判断
            }
        }
        if(i==n)//循环走完后i++后变为n，即n如果不会被[2，n-1]的数整除即为素数
            System.out.println(n+"是素数!");



        int n1=scan.nextInt();
        int j=0;
        for(j=2;j<=n1/2;j++) {
            if(n1%j == 0) {
                System.out.println(n1+"不是素数!");
                break;
            }
        }
        if(j> n1/2)
            System.out.println(n1+"是素数!");
    }




    public static void main9(String[] args) {
        System.out.print("1~100的素数有:1 ");
        for(int figure=3;figure<=100;figure++) {
            int i=2;
            for(;i<figure;i++) {
                if(figure%i==0) {
                    break;
                }
            }
            if(i==figure) {
                System.out.print(figure);
                System.out.print(" ");
            }
        }
    }




    //求最大公约数（辗转相除法）
    public static void main10(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int c = a % b;
        while (c != 0) {
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println(b);
    }





    //求0~999999之间的水仙花数并输出（水仙花数是指一个三位数，其各位数字的立方和等于该数本身，如: 153=1^3+5^3+3^3,则153是一个水仙花树）
    //思路:1.如何获得每一位数字  2.如何获得这个数字是几位数
    public static void main11(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        for(int i=0;i<=n;i++) {
            //判断i是几位数，求得每个位上是几，加起来等于原来的数字
            int count=0;
            int tmp=i;    //假设i=153，那么除10等于0是就能算出他有几位数字
            while(tmp != 0) {
                count++;
                tmp /=10;
            }
            tmp=i;
            int sum=0;
            while(tmp != 0) {
                sum+=Math.pow(tmp%10,count);    //求数字的次方  如:153%10=3  则3的count次方
                tmp /=10;
            }
            if(sum==i)
                System.out.println(i);
        }
    }





    //给一个数字，求出二进制中1的个数   比如:15 0000 1111   4个1
    public static void main12(String[] args) {
        Scanner scan =new Scanner(System.in);
        int n=scan.nextInt();
        int count=0;
        for (int i = 0; i < 32; i++) {     //按位与是补码在参与运算
            if((n>>>i & 1)!=0) {      //如果无符号右移和1按位与是1那么这个位就是1
                count++;
            }
        }
        System.out.println(count);    //法一的缺点是要移动32次

        count=0;
        int tmp=n;
        while(n!=0) {
            if((n&1)!=0) {
                count++;
            }
            n=n>>>1;    //使用无符号右移是因为-1如果是算术右移，移依次右边补1，那么这个数就一直会是一个不为0的数，那么程序就会死循环
        }
        System.out.println(count);  //法二是只要n为0，那么就会停止，相对法一来说，运行次数少一些


        count=0;
        n=tmp;
        while(n!=0) {
            n=n&(n-1);          //法三是积累所得，n与后一个数按位与，当他变为0是就能得出n中含有1的个数
            count++;
        }
        System.out.println(count);
    }




    //获取一个数二进制序列中所有的偶数位和奇数位，分别输出二进制序列
    //规定的是从右往左数 比如:0101 偶数位是0 0  奇数位是1 1   位上是几就和1进行与运算是0与出来就是0，是1与出来就是1
    public static void main13(String[] args) {
        Scanner scan =new Scanner(System.in);
        int n=scan.nextInt();
        //偶数位
        System.out.print("偶数位:");
        for (int i = 31; i >=1 ; i-=2) {
            System.out.print(((n>>i)&1)+" ");
        }
        System.out.println();
        //奇数位
        System.out.print("奇数位:");
        for (int i = 30; i >=0 ; i-=2) {
            System.out.print(((n>>i)&1)+" ");
        }
    }



    //0~100之间，数字9出现的次数（20）99算1次
    public static void main14(String[] args) {
        int count=0;
        for (int i = 0; i <=100 ; i++) {
            if(i%10==9) {
                count++;
            }else if(i/10==9) {
                count++;
            }
        }
        System.out.println(count);
    }




    //x型图案

//            *   *
//             * *
//              *
//             * *
//            *   *
    public static void main(String[] args) {
        Scanner scan =new Scanner(System.in);
        int n=scan.nextInt();
        for (int i = 0; i <n ; i++) {
            for (int j = 0; j < n; j++) {
                if(i==j||i+j==n-1) {
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}